package com.example.leave.service;

import com.example.leave.common.CommonPage;
import com.example.leave.dto.ChangeHistory;
import com.example.leave.dto.LeaveFormOperationHistoryDto;
import com.example.leave.entity.LeaveForm;
import com.example.leave.form.IdAndPageInfoForm;
import com.example.leave.form.IdAndTimeBetweenAndPageInfoVoForm;

import java.util.List;

public interface LeaveFormOperationHistoryService {
    /**
     * 将请假表的增加的操作信息写入
     *
     * @param newLeaveForm 请假表单信息
     * @author 黄贵波
     * @Time 2020/12/5
     */
    void addOperation(LeaveForm newLeaveForm);

    /**
     * 将请假表的删除的操作信息写入
     *
     * @param leaveFormId 要删除的请假表id
     * @author 黄贵波
     * @Time 2020/12/5
     */
    void deleteOperation(String leaveFormId);

    /**
     * 将请假表的更新的操作信息写入
     *
     * @param newLeaveForm 要更新的请假表信息
     * @author 黄贵波
     * @Time 2020/12/5
     */
    void updateOperation(LeaveForm newLeaveForm);

    /**
     * 通过用户id查找请假表单履历信息
     *
     * @param userIdAndPageInfoForm 用户id和分页对象
     * @return 符合条件的请假表单的履历表数据传输对象的分页对象
     * @author 黄贵波
     * @Time 2020/12/5
     */
    CommonPage<LeaveFormOperationHistoryDto> findByUserId(IdAndPageInfoForm userIdAndPageInfoForm);

    /**
     * 通过操作者和操作时间区间查找请假表单履历信息
     *
     * @param operatorAndTimeBetweenAndPageInfoVo 操作者id和分页对象
     * @return 符合条件的请假表单的履历表数据传输对象的分页对象
     * @author 黄贵波
     * @Time 2020/12/5
     */
    CommonPage<LeaveFormOperationHistoryDto> findByOperatorAndOperationTimeBetween
    (IdAndTimeBetweenAndPageInfoVoForm operatorAndTimeBetweenAndPageInfoVo);

    /**
     * 通过表单id查找请假表单履历信息
     *
     * @param leaveFormIdAndPageInfoForm 请假表id和分页对象
     * @return 符合条件的请假表单的履历表数据传输对象的分页对象
     * @author 黄贵波
     * @Time 2020/12/5
     */
    CommonPage<LeaveFormOperationHistoryDto> findByLeaveFormId(IdAndPageInfoForm leaveFormIdAndPageInfoForm);

    /**
     * 通过表单id查找该请假表单详细变更信息
     *
     * @param leaveFormIdAndPageInfoForm 请假表id和分页对象
     * @return 这张表的详细变更历史
     * @author 黄贵波
     * @Time 2020/12/5
     */
    List<ChangeHistory> findChangeByLeaveFormId(IdAndPageInfoForm leaveFormIdAndPageInfoForm);

}
